package com.example.springbooteasycode.utils.excel;

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFFont;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileOutputStream;
import java.io.IOException;

public class ExcelMergeCellsExample {
    public static void main(String[] args) throws IOException {
        // 创建一个新的工作簿和表
        XSSFWorkbook workbook = new XSSFWorkbook();
        Sheet sheet = workbook.createSheet("Sheet1");

        // 设置列宽
        int columnWidth = 20 * 256;
        for (int i = 0; i < 10; i++) {
            sheet.setColumnWidth(i, columnWidth);
        }

        // 创建第一行
        Row row = sheet.createRow(0);
        row.setHeightInPoints(20);

        // 合并第一行的0-6位，并设置标题“报名人信息”
        int startColumn1 = 0;
        int endColumn1 = 6;
        String title1 = "报名人信息";
        createMergedCell(sheet, row, startColumn1, endColumn1, title1, workbook);

        // 合并第一行的7-N位，并设置标题“报名人字段信息”
        int startColumn2 = 7;
        int endColumn2 = 9; // 假设总共有10列，N=9
        String title2 = "报名人字段信息";
        createMergedCell(sheet, row, startColumn2, endColumn2, title2, workbook);

        // 将工作簿写入文件
        try (FileOutputStream fileOut = new FileOutputStream("/Users/boykchen/Desktop/exampleMerged.xlsx")) {
            workbook.write(fileOut);
        }

        // 关闭工作簿
        workbook.close();
    }

    /**
     * 创建并合并单元格，设置标题和样式
     */
    private static void createMergedCell(Sheet sheet, Row row, int startColumn, int endColumn, String title, XSSFWorkbook workbook) {
        // 创建合并区域
        CellRangeAddress cellRangeAddress = new CellRangeAddress(0, 0, startColumn, endColumn);
        sheet.addMergedRegion(cellRangeAddress);

        // 创建单元格并设置值
        Cell cell = row.createCell(startColumn);
        cell.setCellValue(title);

        // 创建单元格样式
        XSSFCellStyle cellStyle = workbook.createCellStyle();
//        setBorderStyle(cellStyle, startColumn, endColumn); // 设置边框
        setFontStyle(cellStyle, workbook); // 设置字体
        setAlignment(cellStyle); // 设置文本对齐方式

        // 应用样式到单元格
        cell.setCellStyle(cellStyle);
    }

//    /**
//     * 设置单元格边框样式
//     */
//    private static void setBorderStyle(XSSFCellStyle cellStyle, int startColumn, int endColumn) {
//        cellStyle.setBorderTop(BorderStyle.THIN);
//        cellStyle.setTopBorderColor(IndexedColors.BLACK.getIndex());
//        cellStyle.setBorderBottom(BorderStyle.THIN);
//        cellStyle.setBottomBorderColor(IndexedColors.BLACK.getIndex());
//
//        if (startColumn == 0) {
//            cellStyle.setBorderLeft(BorderStyle.THIN);
//            cellStyle.setLeftBorderColor(IndexedColors.BLACK.getIndex());
//        }
//        if (endColumn == 9) { // 假设总共有10列，N=9
//            cellStyle.setBorderRight(BorderStyle.THIN);
//            cellStyle.setRightBorderColor(IndexedColors.BLACK.getIndex());
//        }
//    }

    /**
     * 设置单元格字体样式
     */
    private static void setFontStyle(XSSFCellStyle cellStyle, XSSFWorkbook workbook) {
        XSSFFont font = workbook.createFont();
        font.setFontHeightInPoints((short) 14); // 设置字体大小为14磅
        font.setBold(true); // 加粗字体
        cellStyle.setFont(font);
    }

    /**
     * 设置单元格文本对齐方式（水平和垂直居中）
     */
    private static void setAlignment(XSSFCellStyle cellStyle) {
        cellStyle.setAlignment(HorizontalAlignment.CENTER); // 水平居中
        cellStyle.setVerticalAlignment(VerticalAlignment.CENTER); // 垂直居中
    }
}
